<!DOCTYPE html>
<html lang="en">

<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
</head>

<body>

</body>
<script>
    // ES6 数组新增

    // (1) 构造函数Array的新增方法
    // Array.from()   1. 伪数组转真数组   2.ES6 新增的数据结构 Set 和 Map转化为数组

    // Array.of()   用于解决new Array() 接收参数的问题

    // new Array(10) 接收一个参数,且是number类型 => 会生成对应长度的数组
    // var arr = new Array(10);
    // console.log(arr); // [,,,,,,,,,]

    // var arr = Array.of(10);
    // console.log(arr); // [10]

    // var arr = Array.of(10,20,30);
    // console.log(arr); // [10,20,30]

    // (2) 数组新增方法  => 官方提供专门供数组使用
    // 语法: 数组.方法();

    // find()  遍历数组,每次循环时执行传入的回调函数,回调函数可以返回一个条件表达式,返回第一个满足条件的元素
    // findIndex() 遍历数组,每次循环时执行传入的回调函数,回调函数可以返回一个条件表达式,返回第一个满足条件的元素的下标
    // findLast()  遍历数组,每次循环时执行传入的回调函数,回调函数可以返回一个条件表达式,返回最后一个满足条件的元素
    // findLastIndex() 遍历数组,每次循环时执行传入的回调函数,回调函数可以返回一个条件表达式,返回最后一个满足条件的元素的下标
    // 是否影响原数组: 不影响

    // var list = [1,4,7,2,5,8,3,6,9];

    // var result = list.find(function(item,index,array){
    //     console.log(item,index,array);
    //     return item % 2 == 0 && item % 3 == 0;
    // })
    // console.log(result);

    // var result = list.findIndex(function(item,index,array){
    //     console.log(item,index,array);
    //     return item % 2 == 0 && item % 3 == 0;
    // })
    // console.log(result);


    // fill方法使用给定值，填充一个数组。  (将数组中的每个元素替换为对应的值)
    // 返回值:  返回原数组  
    // 是否影响原数组: 影响

    // var list = [1,4,7,2,5,8,3,6,9];

    // var result = list.fill(0);
    // console.log(result);
    // console.log(list);

    // 记录教室中6盏灯的开关状态 
    // var list = new Array(6).fill(false);
    // console.log(list);


    // includes()  判断数组中是否存在某个元素
    // 返回值: 存在 => true  不存在 =>false
    // 是否影响原数组: 不影响

    // 注意: includes() 可以判断数组中是否存在NaN

    // var list = [1,4,7,2,NaN,5,8,3,6,9];

    // var result = list.indexOf(4);
    // console.log(result);
    // var result = list.includes(4)
    // console.log(result);

    // 数组中是否存在NaN
    // var result = list.indexOf(NaN);  // indexOf的比较机制 === 比较
    // console.log(result);
    // var result = list.includes(NaN); 
    // console.log(result);



    // flat()  数组拉平(数组扁平化)  => 将多维数组拉平为一维数组
    // 返回值: 返回一个新数组
    // 是否影响原数组: 不影响

    // 注意: flat()默认只会“拉平”一层， => 将二维拉平为一维
    //       如果想要“拉平”多层的嵌套数组，可以将flat()方法的参数写成一个整数，表示想要拉平的层数，默认为1。
    //       如果不管有多少层嵌套，都要转成一维数组，可以用Infinity关键字作为参数。  => 无限拉平
    var list = [1, 2, 3, [4, 5, 6]];   // 得到 [1,2,3,4,5,6]

    var result = list.flat();
    console.log(result);


    var list = [1, 2, 3, [4, 5, 6, [7, 8, 9]]];   // 得到 [1,2,3,4,5,6,7,8,9]

    var result = list.flat(2);
    console.log(result);


    var list = [1, 2, 3, [4, 5, 6, [7, 8, 9,[10,[11,[12,[13,[14,[15]]]]]]]]];   
    var result = list.flat(Infinity);
    console.log(result);












</script>

</html>